#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN (1000)
void inputString(const char * prompt, char * input)
{
	input[0] = 0;
	printf("%s", prompt);
	scanf("%[^\n]", input);
	fflush(stdin);
}
int power(int a, int n) 
{
	int b;
	if (n == 0) return 1;
	if (n&1 == 1)
		{
			return power(a, n-1) * a;
		}
	else 
		{
			b = power(a, n>>1);
			return b * b;
		}
}
int StringToInteger(char * string, int base, int * is_ok)
{
	int i, j, s = 0;
	const char * digits = "0123456789abcdefghijklmnopqrstuvwxyz";
	const char * digits_alt = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	char buffer[MAX_LEN]="";
	for(i=0; i<strlen(string); i++)
	{
		if(isspace(string[i])!=0) memmove(string+i, string+i+1, (strlen(string)-i)*sizeof(char));
	}
	for(i=0; i<strlen(string); i++)
	{
		for(j=0; j<strlen(digits); j++)
		{
			if(((string[i]==digits[j])||(string[i]==digits_alt[j]))&&(j>base-1))
			{
				memcpy(buffer, string, i*sizeof(char));
				strcpy(string, buffer);
				break;
			}
		}
	}
	if(string[0]==0)
	{
		*is_ok = 0;
		return 0;
	}
	for(i=0; i<strlen(string); i++)
	{
		for(j=0; j<strlen(digits); j++)
		{
			if((string[i]==digits[j])||(string[i]==digits_alt[j]))
			{
				break;
			}
		}
		s=s+j*power(base, strlen(string)-i-1);
	}
	*is_ok = 1;
	return s;
}


void main()
{
	int base, is_ok = 1, p;
	char string[MAX_LEN]="";
	inputString("Input string: ", string);
	printf("Input base: ");
	scanf("%d", &base);
	fflush(stdin);
	p=StringToInteger(string, base, &is_ok);
	if(is_ok==0)
	{
		printf("An error has been occured! Restart app and try another string and/or base.\n");
	}
	else
	{
	printf("Number: %d\n", p);
	}
	system("PAUSE");
}
